package com.starry.module.system.core.member.service;

import com.starry.core.common.domain.vo.PageVo;
import com.starry.module.system.api.member.domain.qo.MemberUserPageQo;
import com.starry.module.system.api.member.domain.qo.MemberUserQo;
import com.starry.module.system.api.member.domain.vo.MemberUserDtlVo;
import com.starry.module.system.api.member.domain.vo.MemberUserVo;
import com.starry.module.system.core.member.entity.MemberUser;

import java.util.Set;

/**
 * 会员用户-服务
 * @author xiaoke
 */
public interface MemberUserService {

    /**
     * 分页查询所有数据
     *
     * @param pageQo 查询实体
     * @return 所有数据
     */
    PageVo<MemberUserVo> page(MemberUserPageQo pageQo);

    /**
     * 通过主键查询单条数据
     *
     * @param id 主键
     * @return 单条数据
     */
    MemberUserDtlVo getByIdDtl(Long id);

    /**
     * 通过主键查询单条数据
     *
     * @param id 主键
     * @return 单条数据
     */
    MemberUser getById(Long id);

    /**
     * 新增数据
     *
     * @param memberUserQo 实体对象
     * @return 新增结果
     */
    Long save(MemberUserQo memberUserQo);

    /**
     * 修改数据
     *
     * @param memberUserQo 实体对象
     */
    void updateById(MemberUserQo memberUserQo);

    /**
     * 删除数据
     *
     * @param idList 主键集合
     */
    void removeByIds(Set<Long> idList);

    /**
     * 启用数据
     *
     * @param idList 主键集合
     */
    void enable(Set<Long> idList);

    /**
     * 禁用数据
     *
     * @param idList 主键集合
     */
    void disable(Set<Long> idList);

    /**
     * 取用户信息（用户名、手机号、邮箱）
     *
     * @param value value
     * @return 会员用户
     */
    MemberUser getByValue(String value);

    /**
     * 初始化用户
     *
     * @param memberUser 会员用户
     */
    MemberUser initialUser(MemberUser memberUser);

    /**
     * 初始化用户
     *
     * @param openid openid
     * @return 会员用户
     */
    MemberUser initialMemberUser(String openid);
}

